package Negocios;

import Gestores.DtoObjects.TituloAcademicoDTO;
import Gestores.Entidades.EntidadTituloAcademico;
import Gestores.Factory.FactoryClass;
import java.sql.Date;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

public class TituloAcademicoNegocio {

    private TituloAcademicoDTO gestorTituloAcademico;

    public TituloAcademicoNegocio() {
        gestorTituloAcademico = FactoryClass.getTituloAcademicoInstance();
    }

    public ArrayList<Object> buscarPorNumero(int numero) throws Exception {
        if (numero > 0) {
            return gestorTituloAcademico.buscarPorNumero(numero);
        } else {
            throw new Exception(TituloAcademicoNegocio.class.getName() + ": El número especificado no es válido.");
        }
    }

    public ArrayList<Object> buscarPorIdAfiliado(String idAfiliado) throws Exception {
        if (idAfiliado == null) {
            throw new Exception(TituloAcademicoNegocio.class.getName() + ": El idAfiliado es nulo.");
        } else {
            return gestorTituloAcademico.buscarPorIdAfiliado(idAfiliado);
        }
    }

    public ArrayList<Object> buscarPorUniversidad(String universidad) throws Exception {
        if (universidad == null) {
            throw new Exception(TituloAcademicoNegocio.class.getName() + ": La universidad es Nula.");
        } else {
            return gestorTituloAcademico.buscarPorUniversidad(universidad);
        }
    }

    public ArrayList<Object> buscarPorPais(String pais) throws Exception {
        if (pais == null) {
            throw new Exception(TituloAcademicoNegocio.class.getName() + ": El PAIS es nulo");
        } else {
            return gestorTituloAcademico.buscarPorPais(pais);
        }
    }

    public ArrayList<Object> buscarPorFecha(Date fecha) throws Exception {
        if (fecha == null) {
            throw new Exception(TituloAcademicoNegocio.class.getName() + ": La FECHA es nula.");
        } else {
            return gestorTituloAcademico.buscarPorFecha(fecha);
        }
    }

    public void insertar(EntidadTituloAcademico eta) throws Exception {
        if (validarEntidad(eta)) {
            gestorTituloAcademico.insertar(eta);
        } else {
            throw new Exception("Hay campos erróneos en la entidad.");
        }
    }

    public void actualizar(String idAfiliado, EntidadTituloAcademico entidad) throws Exception {
        if (validarEntidad(entidad)) {
            gestorTituloAcademico.actualizar(idAfiliado, entidad);
        } else {
            throw new Exception("Hay campos erróneos en la entidad.");
        }
    }

    public void eliminar(EntidadTituloAcademico eta) throws Exception {
        if ((eta.getNumero() != 0) && (eta.getId_afiliado() != null)) {
            gestorTituloAcademico.eliminacionFisica(eta);
        } else {
            throw new Exception("Campos de eliminacion ausentes.");
        }
    }

    public boolean existe(int numero) throws Exception {
        if (numero>0) {
            return gestorTituloAcademico.existe(numero);
        } else {
            throw new Exception("El numero especificado no es valido.");
        }
    }
    
    public ArrayList<Object> mostrarTabla() throws Exception {
        return gestorTituloAcademico.listarTabla();
    }

    public DefaultTableModel tabularDatos(ArrayList<Object> lista) {
        DefaultTableModel modelo = new DefaultTableModel();
        modelo.addColumn("Numero");
        modelo.addColumn("Id Afiliado");
        modelo.addColumn("Decripcion");
        modelo.addColumn("Universidad");
        modelo.addColumn("Pais");
        modelo.addColumn("Fecha");
        for (int i = 0; i < lista.size(); i++) {
            EntidadTituloAcademico eta = (EntidadTituloAcademico) lista.get(i);
            Object[] fila = new Object[]{
                eta.getNumero(),
                eta.getId_afiliado(),
                eta.getDescripcion(),
                eta.getUniversidad(),
                eta.getPais(),
                eta.getFecha()
            };
            modelo.addRow(fila);
        }
        return modelo;
    }

    private boolean validarEntidad(EntidadTituloAcademico eta) {
        if (eta.getNumero() == 0) {
            return false;
        }
        if (eta.getId_afiliado() == null) {
            return false;
        }
        if (eta.getDescripcion() == null) {
            return false;
        }
        if (eta.getUniversidad() == null) {
            return false;
        }
        if (eta.getPais() == null) {
            return false;
        }
        return true;
    }
}
